/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica.Controladoras.MateriaPrima;

import Logica.Core.MateriaPrima.Leña;
import Logica.Core.MateriaPrima.YerbaAjena;
import Logica.Core.MateriaPrima.YerbaPropia;
import Logica.Core.PersonaLegal.Proveedor;
import Logica.Core.Plantaciones.Parcela;
import Persistencia.ControladoraPersistencia;
import Persistencia.JPAControllers.exceptions.NonexistentEntityException;
import Persistencia.JPAControllers.exceptions.PreexistingEntityException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author daniel
 */
public final class ControladoraLogicaMateriaPrima {

    protected ControladoraPersistencia miControladora;
    private List<Leña> misLeñas = new LinkedList<>();
    private List<YerbaAjena> misYerbasAjenas = new LinkedList<>();
    private List<YerbaPropia> misYerbasPropias = new LinkedList<>();

    public ControladoraLogicaMateriaPrima(ControladoraPersistencia miControladora) {
        this.miControladora = miControladora;
        try {
            misLeñas = dameMisLeñas();
            misYerbasAjenas = dameMisYerbasAjenas();
            misYerbasPropias = dameMisYerbasPropias();
        } catch (NullPointerException e) {
            misLeñas = new LinkedList<>();
            misYerbasAjenas = new LinkedList<>();
            misYerbasPropias = new LinkedList<>();
        }

    }

    // <editor-fold defaultstate="collapsed" desc="Clase Leña">
    public void crearLeña(Proveedor miProveedor) throws PreexistingEntityException, Exception {

        misLeñas = dameMisLeñas();
        int id = misLeñas.size();
        boolean encontro = false;
        Leña miNuevoLeña = new Leña(miProveedor, id);


        for (int i = 0; i < misLeñas.size() && !encontro; i++) {
            Leña miLeña = misLeñas.get(i);
            if (miLeña.getId() == id) {
                encontro = true;
                throw new PreexistingEntityException("Leña ya Existente.");
            }
        }

        misLeñas.add(miNuevoLeña);
        miControladora.getMiPersistenciaLeña().crearLeña(miNuevoLeña);
    }

    public void eliminarLeña(int id) throws NonexistentEntityException, Exception {
        misLeñas = dameMisLeñas();
        boolean encontro = false;
        Leña miLeña = null;

        for (int i = 0; i < misLeñas.size() && !encontro; i++) {
            miLeña = misLeñas.get(i);
            if (miLeña.getId() == id) {
                encontro = true;
                misLeñas.remove(i);
            }
        }

        miControladora.getMiPersistenciaLeña().eliminarLeña(id);
    }

    public void modificarLeña(int id, Proveedor miProveedor, double kilaje) throws NonexistentEntityException, Exception {

        boolean encontro = false;
        int pos = 0;

        misLeñas = dameMisLeñas();
        Leña miLeña = null;

        for (int i = 0; i < misLeñas.size() && !encontro; i++) {
            miLeña = misLeñas.get(i);
            if (miLeña.getId() == id) {
                encontro = true;
                pos = i;
            }
        }

        miLeña.setMiProveedor(miProveedor);
        miLeña.setKilaje(kilaje);


        misLeñas.set(pos, miLeña);
        miControladora.getMiPersistenciaLeña().modificarLeña(miLeña);

    }

    public Leña dameUnLeña(int id) {
        misLeñas = dameMisLeñas();
        boolean encontro = false;
        Leña miLeña = null;

        for (int i = 0; i < misLeñas.size() && !encontro; i++) {
            miLeña = misLeñas.get(i);
            if (miLeña.getId() == id) {
                encontro = true;
            }
        }

        return miLeña;
    }

    public List<Leña> dameMisLeñas() {
        misLeñas = miControladora.getMiPersistenciaLeña().dameMisLeñas();
        return misLeñas;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Clase YerbaAjena">
    public void crearYerbaAjena(Proveedor miProveedor, double kilaje) throws PreexistingEntityException, Exception {

        misYerbasAjenas = dameMisYerbasAjenas();
        int id = misYerbasAjenas.size();
        boolean encontro = false;
        YerbaAjena miNuevoYerbaAjena = new YerbaAjena(miProveedor, id);


        for (int i = 0; i < misYerbasAjenas.size() && !encontro; i++) {
            YerbaAjena miYerbaAjena = misYerbasAjenas.get(i);
            if (miYerbaAjena.getId() == id) {
                encontro = true;
                throw new PreexistingEntityException("YerbaAjena ya Existente.");
            }
        }

        misYerbasAjenas.add(miNuevoYerbaAjena);
        miControladora.getMiPersistenciaYerbaAjena().crearYerbaAjena(miNuevoYerbaAjena);
    }

    public void eliminarYerbaAjena(int id) throws NonexistentEntityException, Exception {
        misYerbasAjenas = dameMisYerbasAjenas();
        boolean encontro = false;
        YerbaAjena miYerbaAjena = null;

        for (int i = 0; i < misYerbasAjenas.size() && !encontro; i++) {
            miYerbaAjena = misYerbasAjenas.get(i);
            if (miYerbaAjena.getId() == id) {
                encontro = true;
                misYerbasAjenas.remove(i);
            }
        }

        miControladora.getMiPersistenciaYerbaAjena().eliminarYerbaAjena(id);
    }

    public void modificarYerbaAjena(int id, Proveedor miProveedor, double kilaje) throws NonexistentEntityException, Exception {

        boolean encontro = false;
        int pos = 0;

        misYerbasAjenas = dameMisYerbasAjenas();
        YerbaAjena miYerbaAjena = null;

        for (int i = 0; i < misYerbasAjenas.size() && !encontro; i++) {
            miYerbaAjena = misYerbasAjenas.get(i);
            if (miYerbaAjena.getId() == id) {
                encontro = true;
                pos = i;
            }
        }

        miYerbaAjena.setUnproveedor(miProveedor);
        miYerbaAjena.setKilaje(kilaje);


        misYerbasAjenas.set(pos, miYerbaAjena);
        miControladora.getMiPersistenciaYerbaAjena().modificarYerbaAjena(miYerbaAjena);

    }

    public YerbaAjena dameUnYerbaAjena(int id) {
        misYerbasAjenas = dameMisYerbasAjenas();
        boolean encontro = false;
        YerbaAjena miYerbaAjena = null;

        for (int i = 0; i < misYerbasAjenas.size() && !encontro; i++) {
            miYerbaAjena = misYerbasAjenas.get(i);
            if (miYerbaAjena.getId() == id) {
                encontro = true;
            }
        }

        return miYerbaAjena;
    }

    public List<YerbaAjena> dameMisYerbasAjenas() {
        misYerbasAjenas = miControladora.getMiPersistenciaYerbaAjena().dameMisYerbaAjenas();
        return misYerbasAjenas;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Clase YerbaPropia">
    public void crearYerbaPropia(Parcela miParcela, double kilaje) throws PreexistingEntityException, Exception {

        misYerbasPropias = dameMisYerbasPropias();
        int id = misYerbasPropias.size();
        boolean encontro = false;
        YerbaPropia miNuevoYerbaPropia = new YerbaPropia(miParcela, id);


        for (int i = 0; i < misYerbasPropias.size() && !encontro; i++) {
            YerbaPropia miYerbaPropia = misYerbasPropias.get(i);
            if (miYerbaPropia.getId() == id) {
                encontro = true;
                throw new PreexistingEntityException("YerbaPropia ya Existente.");
            }
        }

        misYerbasPropias.add(miNuevoYerbaPropia);
        miControladora.getMiPersistenciaYerbaPropia().crearYerbaPropia(miNuevoYerbaPropia);
    }

    public void eliminarYerbaPropia(int id) throws NonexistentEntityException, Exception {
        misYerbasPropias = dameMisYerbasPropias();
        boolean encontro = false;
        YerbaPropia miYerbaPropia = null;

        for (int i = 0; i < misYerbasPropias.size() && !encontro; i++) {
            miYerbaPropia = misYerbasPropias.get(i);
            if (miYerbaPropia.getId() == id) {
                encontro = true;
                misYerbasPropias.remove(i);
            }
        }

        miControladora.getMiPersistenciaYerbaPropia().eliminarYerbaPropia(id);
    }

    public void modificarYerbaPropia(int id, Parcela miParcela, double kilaje) throws NonexistentEntityException, Exception {

        boolean encontro = false;
        int pos = 0;

        misYerbasPropias = dameMisYerbasPropias();
        YerbaPropia miYerbaPropia = null;

        for (int i = 0; i < misYerbasPropias.size() && !encontro; i++) {
            miYerbaPropia = misYerbasPropias.get(i);
            if (miYerbaPropia.getId() == id) {
                encontro = true;
                pos = i;
            }
        }

        miYerbaPropia.setMiParcela(miParcela);
        miYerbaPropia.setKilaje(kilaje);


        misYerbasPropias.set(pos, miYerbaPropia);
        miControladora.getMiPersistenciaYerbaPropia().modificarYerbaPropia(miYerbaPropia);

    }

    public YerbaPropia dameUnaYerbaPropia(int id) {
        misYerbasPropias = dameMisYerbasPropias();
        boolean encontro = false;
        YerbaPropia miYerbaPropia = null;

        for (int i = 0; i < misYerbasPropias.size() && !encontro; i++) {
            miYerbaPropia = misYerbasPropias.get(i);
            if (miYerbaPropia.getId() == id) {
                encontro = true;
            }
        }

        return miYerbaPropia;
    }

    public List<YerbaPropia> dameMisYerbasPropias() {
        misYerbasPropias = miControladora.getMiPersistenciaYerbaPropia().dameMisYerbaPropias();
        return misYerbasPropias;
    }
    // </editor-fold>
}
